পারমাণবিক অপারেশন ব্যয়


92

পারমাণবিক ক্রিয়াকলাপের দাম (তুলনা-ও-অদলবদল বা পারমাণবিক যোগ / হ্রাস) কোনটি? এটি কত চক্র গ্রহণ করে? এটি এসএমপি বা NUMA- এ অন্য প্রসেসরের বিরতি দেবে, বা এটি মেমরির অ্যাক্সেসগুলিকে ব্লক করবে? এটি কি আউট-অফ-অর্ডার সিপিইউতে রিঅর্ডার বাফারটি ফ্লাশ করবে?

ক্যাশে কী প্রভাব ফেলবে?

আমি আধুনিক, জনপ্রিয় সিপিইউগুলিতে আগ্রহী: x86, x86_64, পাওয়ারপিসি, স্পার্ক, ইটানিয়াম।


@ জেসন এস, যে কোনও। ক্যাস এবং পারমাণবিক ইনক / ডিসের মধ্যে পার্থক্য নগণ্য।
osgx

4
X86 এর পারমাণবিক ক্রিয়াকলাপগুলি ধীর হয়ে যায় কারণ মেমরির ঠিকানায় আরও যুক্তি স্থাপন করা হয়। আমি সাধারণভাবে বিশ্বাস করি তারা লক না করা অপারেশন থেকে ধীরে ধীরে প্রস্থের ক্রমের কাছাকাছি রয়েছে তবে স্পষ্টতই এটি ব্যবহৃত অপারেশন, বিতর্ক এবং মেমরির বাধাগুলির উপর নির্ভর করে পরিবর্তিত হবে।
স্টিফেন নট

হুমমম। লেখাগুলি x86-তে পারমাণবিক বলে মনে হচ্ছে। 'লিনাক্স কার্নেল বোঝা' -> স্পিন_লনক
osgx

জাভাতে একটি 32 বিট রাইট পারমাণবিক, অর্থাৎ এটি বহনযোগ্য পারমাণবিক (তবে কোনও মেমোরি বাধা শব্দার্থবিজ্ঞান নেই, তাই এটি প্রায়শই পয়েন্টারগুলির পক্ষে যথেষ্ট হয় না)। 1 যোগ করা সাধারণত পারমাণবিক নয়, যদি না আপনি লক উপসর্গ যোগ করেন। লিনাক্স কার্নেল সম্পর্কে, স্পিন_লক দেখার দরকার নেই। বর্তমান রিলিজগুলিতে দেখুন, খিলান / x86 / অন্তর্ভুক্ত / এএসএম / পরমাণু_32। (এটি অন্তর্ভুক্ত / asm-i386 / atomic.h)।
ব্লেজারব্ল্যাডে

@ ব্লায়সারব্লাড, জাভা এখানে নেই। LOCKed অপারেশন খরচ কি?
osgx

উত্তর:


60

আমি গত দিনগুলির জন্য প্রকৃত ডেটা সন্ধান করেছি, এবং কিছুই পাইনি। তবে, আমি কিছু গবেষণা করেছি, যা পারমাণবিক অপের ব্যয়ের তুলনা করে ক্যাশে মিসের ব্যয়ের সাথে।

lock cmpxchgপেন্টিয়ামপ্রো (ডকটিতে বর্ণিত হিসাবে) এর আগে x86 লক উপসর্গের ( পারমাণবিক সিএএস সহ ) ব্যয় হ'ল মেমোরি অ্যাক্সেস (ক্যাশে মিসের মতো), + অন্যান্য প্রসেসরের দ্বারা মেমরি অপারেশন বন্ধ করা, + অন্যান্য প্রসেসরের সাথে কোনও বিরোধ বাস লক করার চেষ্টা করছি তবে, পেন্টিয়ামপ্রো থেকে, সাধারণ রাইটব্যাক ক্যাশেবল মেমরির জন্য (সমস্ত অ্যাপ্লিকেশন মেমরির সাথে যোগাযোগ করে, আপনি যদি হার্ডওয়ারের সাথে সরাসরি কথা বলেন না), সমস্ত মেমরি অপারেশনগুলি অবরুদ্ধ করার পরিবর্তে, কেবল প্রাসঙ্গিক ক্যাশে লাইনটি অবরুদ্ধ করা হয়েছে ( @ ওএসজিএক্সের উত্তরের লিঙ্কের ভিত্তিতে ) ।

অর্থাত্ মেসি ভাগের জবাব দেওয়ার মূল বিলম্ব এবং রিয়েলটির জন্য আরএফওর অনুরোধটি আসল lockএড অপারেশনের স্টোর অংশ না হওয়া পর্যন্ত । এটিকে "ক্যাশে লক" বলা হয় এবং কেবলমাত্র এটির একটি ক্যাশে লাইন প্রভাবিত করে। অন্যান্য কোর একই সময়ে অন্যান্য লাইন লোড / স্টোরেজ বা এমনকি ক্যাশ করা যেতে পারে।


প্রকৃতপক্ষে, সিএএস কেস আরও জটিল হতে পারে, যেমন এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে , কোনও সময় নেই, বিশ্বস্ত ইঞ্জিনিয়ারের অন্তর্দৃষ্টিপূর্ণ বর্ণনা ছাড়া। (কমপক্ষে সাধারণ ব্যবহারের ক্ষেত্রে যেখানে আপনি আসল সিএএসের আগে খাঁটি লোড করেন))

খুব বেশি বিশদে যাওয়ার আগে, আমি বলব যে একটি লকড অপারেশনের জন্য একটি ক্যাশে মিস + একই ক্যাচলিনে অন্য প্রসেসরের সাথে সম্ভাব্য বিতর্ক ব্যয় করা হয়, যখন সিএএস + পূর্ববর্তী লোড (যা প্রায় সর্বদা মুউটেক্সেস ব্যতীত প্রয়োজনীয় যেখানে আপনি সর্বদা সিএএস 0 এবং 1) দুটি ক্যাশে মিস করতে পারে।

তিনি ব্যাখ্যা করেছেন যে কোনও একক স্থানে একটি লোড + সিএএস আসলে লোড-লিংকড / স্টোর-কন্ডিশনাল (দ্বিতীয়টির জন্য দেখুন) এর মতো দুটি ক্যাশে মিস মিস করতে পারে। তাঁর ব্যাখ্যা এমইএসআই ক্যাশে সমন্বয় প্রোটোকলের জ্ঞানের উপর নির্ভর করে । এটি ক্যাচলিনের জন্য 4 টি রাজ্য ব্যবহার করে: এম (অদ্ভুত), ই (এক্সক্লুসিভ), এস (হারেড), আই (নকল) (এবং তাই এটি এমইএসআই বলা হয়) যেখানে প্রয়োজন সেখানে নীচে ব্যাখ্যা করেছেন। বর্ণনা করা হয়েছে, দৃশ্যটি নিম্নলিখিত:

  • এলওএডি একটি ক্যাশে মিসের কারণ - প্রাসঙ্গিক ক্যাচলাইনটি ভাগ করা অবস্থায় মেমরি থেকে লোড করা হয় (যেমন অন্যান্য প্রসেসরগুলি এখনও সেই ক্যাশেলাইনটিকে মেমরিতে রাখার অনুমতি দেয়; এই অবস্থায় কোনও পরিবর্তন অনুমোদিত নয়)। যদি অবস্থানটি মেমরিতে থাকে তবে এই ক্যাশে মিসটি এড়িয়ে যায়। সম্ভাব্য ব্যয়: 1 ক্যাশে মিস। (ক্যাচলাইন ভাগ করা, এক্সক্লুসিভ বা পরিবর্তিত স্থানে থাকলে, যদি ডেটা এই সিপিইউর এল 1 ক্যাশে থাকে তবে এড়িয়ে যায়)।
  • প্রোগ্রাম সংরক্ষণ করার জন্য নতুন মান গণনা করে,
  • এবং এটি একটি পারমাণবিক সিএএস নির্দেশনা চালায়।
    • এটি একযোগে পরিবর্তন এড়াতে হবে, তাই ক্যাচলাইনটিকে একচেটিয়া অবস্থায় নিয়ে যেতে অন্য সিপিইউগুলির ক্যাশে থেকে ক্যাশলিনের অনুলিপিগুলি অবশ্যই সরিয়ে ফেলতে হবে। সম্ভাব্য ব্যয়: 1 ক্যাশে মিস। এটি ইতিমধ্যে একচেটিয়া মালিকানাধীন, অর্থাত্ এক্সক্লুসিভ বা পরিবর্তিত অবস্থায় থাকলে প্রয়োজন হয় না। উভয় রাজ্যে, অন্য কোনও সিপিইউ ক্যাচলাইন ধারণ করে না, তবে এক্সক্লুসিভ রাজ্যে এটি এখনও সংশোধন করা হয়নি।
    • এই যোগাযোগের পরে, ভেরিয়েবলটি আমাদের সিপিইউর স্থানীয় ক্যাশে পরিবর্তিত হয়, যেখানে এটি সমস্ত অন্যান্য সিপিইউতে বিশ্বব্যাপী দৃশ্যমান হয় (কারণ তাদের ক্যাশেগুলি আমাদের সাথে সুসংগত)। এটি শেষ পর্যন্ত সাধারণ অ্যালগোরিদম অনুযায়ী প্রধান স্মৃতিতে লেখা হবে।
    • পরিবর্তনশীলটি পড়তে বা সংশোধন করতে চাইছে এমন অন্যান্য প্রসেসরগুলিকে প্রথমে ভাগ করা বা এক্সক্লুসিভ মোডে সেই ক্যাচলাইনটি পেতে হবে এবং এটি করার জন্য এই প্রসেসরের সাথে যোগাযোগ করা হবে এবং ক্যাশলাইনের আপডেট হওয়া সংস্করণ পাবেন। পরিবর্তে একটি লকড অপারেশন কেবল ক্যাশে মিস ব্যয় করতে পারে (কারণ ক্যাশেলাইন সরাসরি এক্সক্লুসিভ স্টেটে অনুরোধ করা হবে)।

সমস্ত ক্ষেত্রে, ক্যাশেলিন অনুরোধটি অন্য প্রসেসর ইতিমধ্যে ডেটা সংশোধন করে স্থগিত করতে পারে।


কেন অন্যান্য সিপাসে 1 ক্যাশে মিস হিসাবে রাষ্ট্রের ঘোড়া?
osgx

4
কারণ এটি সিপিইউর বাইরে যোগাযোগ, এবং এভাবে ক্যাশে অ্যাক্সেস করার চেয়ে ধীর। ক্যাশে মিস করতে গেলে অন্য সিপিইউগুলি থেকে যাইহোক যেতে হবে। প্রকৃতপক্ষে, এটি হতে পারে যে অন্য সিপিইউর সাথে কথা বলা মেমোরির সাথে কথা বলার চেয়ে দ্রুত হয়, যদি সরাসরি আন্তঃসংযোগ ব্যবহার করা হয়, যেমন এএমডি হাইপারট্রান্সপোর্ট (একটি বিশাল সময় আগে), বা ইন্টেল থেকে ইন্টেল কুইকপ্যাথ ইন্টারকানেক্ট, খুব সাম্প্রতিক জিয়ন প্রসেসরের উপর নেহালেমের উপর ভিত্তি করে। অন্যথায় অন্যান্য সিপিইউগুলির সাথে যোগাযোগ মেমরির জন্য একই এফএসবিতে ঘটে। আরও তথ্যের জন্য উইকিপিডিয়ায় হাইপার ট্রান্সপোর্ট এবং ফ্রন্ট সাইড বাস অনুসন্ধান করুন।
ব্লেজারব্লেড

বাহ, কখনই ভাবিনি যে সে এত ব্যয়বহুল - একটি ক্যাশে মিস কয়েক হাজার চক্র হতে পারে।
লোথার

4
সত্যি? আমি যে চিত্রটি ব্যবহার করছি তা হ'ল: ক্যাশে মিস করার জন্য একশো চক্র এবং প্রসঙ্গ / অধিকারীকরণের স্যুইচগুলির জন্য (হাজারে চক্র) সহ কয়েক হাজার চক্র।
ব্লেজারব্লেড

4
ক্যাশে মিস কয়েক হাজার চক্র নয়! এটি প্রায় 100ns, যা সাধারণত 300-350 সিপিইউ চক্র ....
ব্যবহারকারী 997112

37

আমি নিম্নলিখিত সেটআপটির সাথে কিছু প্রোফাইলিং করেছি: পরীক্ষার মেশিনটি (এএমডি অ্যাথলোন x৪ x2 3800+) বুট করা হয়েছিল, লং মোডে স্যুইচ করা হয়েছে (বাধা অক্ষম করা হয়েছে) এবং আগ্রহের নির্দেশটি একটি লুপে কার্যকর করা হয়েছিল, 100 পুনরাবৃত্তিগুলি অনিয়ন্ত্রিত এবং এক হাজার লুপ চক্র। লুপের বডিটি 16 বাইটে সারিবদ্ধ হয়েছিল। লুপটির আগে এবং পরে rdtsc নির্দেশনা দিয়ে সময়টি পরিমাপ করা হয়েছিল। অতিরিক্তভাবে কোনও নির্দেশ ছাড়াই একটি ডামি লুপটি কার্যকর করা হয়েছিল (যা লুপ পুনরাবৃত্তির জন্য 2 টি চক্র এবং বাকীটির জন্য 14 টি চক্র পরিমাপ করা হয়েছিল) এবং ফলাফলটি নির্দেশিকা প্রোফাইলের ফলাফল থেকে বাদ দেওয়া হয়েছিল।

নিম্নলিখিত নির্দেশাবলী পরিমাপ করা হয়েছিল:

  • " lock cmpxchg [rsp - 8], rdx" (উভয় তুলনা ম্যাচ এবং মিল)
  • " lock xadd [rsp - 8], rdx",
  • " lock bts qword ptr [rsp - 8], 1"

সমস্ত ক্ষেত্রে সময়টি মাপা হয় প্রায় 310 চক্র, ত্রুটিটি প্রায় +/- 8 চক্র ছিল

এটি একই (ক্যাশেড) স্মৃতিতে পুনরাবৃত্তি কার্যকর করার মান। অতিরিক্ত ক্যাশে মিস সহ সময়গুলি যথেষ্ট বেশি। এছাড়াও এটি সক্রিয়ভাবে 2 টি কোরের একটি দিয়েই করা হয়েছিল, সুতরাং ক্যাশেটি একচেটিয়া মালিকানাধীন ছিল এবং কোনও ক্যাশে সমন্বয় প্রয়োজন হয়নি is

ক্যাশে মিসে লক করা নির্দেশের ব্যয়টি মূল্যায়নের জন্য, আমি wbinvldলক করা নির্দেশের আগে একটি নির্দেশ যুক্ত করেছি এবং তুলনা লুপটিতে wbinvldপ্লাস একটি রেখেছি add [rsp - 8], rax। উভয় ক্ষেত্রেই ব্যয় প্রতি নির্দেশের জুটিতে প্রায় 80,000 চক্র ছিল! লক বিটিএসের ক্ষেত্রে সময়ের পার্থক্য ছিল প্রতি নির্দেশ অনুসারে 180 টি চক্র।

মনে রাখবেন যে এটি পারস্পরিক বৈকল্পিক, তবে যেহেতু লক করা অপারেশনগুলি ক্রিয়াকলাপ ক্রিয়াকলাপ, তাই সম্ভবত বিলম্বের কোনও পার্থক্য নেই।

উপসংহার: একটি লক করা অপারেশন ভারী, তবে একটি ক্যাশে মিস অনেক বেশি ভারী হতে পারে। এছাড়াও: একটি লক করা অপারেশন ক্যাশে মিস করে না। এটি কেবল ক্যাশে সিঙ্ক্রোনাইজেশন ট্র্যাফিকের কারণ হতে পারে, যখন কোনও ক্যাশলাইন একচেটিয়াভাবে মালিকানাযুক্ত না হয়।

মেশিনটি বুট করতে, আমি রিএকটিওএস প্রকল্পের ফ্রিএলডিআর এর একটি x64 সংস্করণ ব্যবহার করেছি। এখানে asm উত্স কোডটি রয়েছে:

#define LOOP_COUNT 1000
#define UNROLLED_COUNT 100

PUBLIC ProfileDummy
ProfileDummy:

    cli

    // Get current TSC value into r8
    rdtsc
    mov r8, rdx
    shl r8, 32
    or r8, rax

    mov rcx, LOOP_COUNT
    jmp looper1

.align 16
looper1:

REPEAT UNROLLED_COUNT
    // nothing, or add something to compare against
ENDR

    dec rcx
    jnz looper1

    // Put new TSC minus old TSC into rax
    rdtsc
    shl rdx, 32
    or rax, rdx
    sub rax, r8

    ret

PUBLIC ProfileFunction
ProfileFunction:

    cli

    rdtsc
    mov r8, rdx
    shl r8, 32
    or r8, rax
    mov rcx, LOOP_COUNT

    jmp looper2

.align 16
looper2:

REPEAT UNROLLED_COUNT
    // Put here the code you want to profile
    // make sure it doesn't mess up non-volatiles or r8
    lock bts qword ptr [rsp - 8], 1
ENDR

    dec rcx
    jnz looper2

    rdtsc
    shl rdx, 32
    or rax, rdx
    sub rax, r8

    ret

ধন্যবাদ! আপনি কি নিজের পরীক্ষার কোড প্রকাশ করতে পারেন বা কোর 2 / কোর i3 / i5 / i7 নিজে পরীক্ষা করতে পারেন? সমস্ত পরীক্ষাগুলি কি আপনার পরীক্ষার সেটআপে আরম্ভ করা হয়েছিল?
osgx

আমি সোর্স কোড যুক্ত করেছি। শুধুমাত্র একটি কোর প্রাথমিক করা হয়েছিল। অন্যান্য মেশিন থেকে ফলাফল দেখতে চাই।
টিমো

পুরো ক্যাশে ডাব্লুবিআইএনভিডির চেয়ে ক্যাশে লাইনটি ফ্ল্যাশ করার জন্য সিএলএফএলএসএইচ খুব হালকা উপায় হওয়া উচিত। ডাব্লুবিআইএনভিডি অতিরিক্ত নির্দেশাবলীর অনুপস্থিতিতে নির্দেশনা-ক্যাশেগুলিও ফ্লাশ করবে।
পিটার কর্ডস

ভাগ করা অবস্থায় ক্যাশে লাইনটি গরম হওয়ার ঘটনাটি পরীক্ষা করা সম্ভবত আকর্ষণীয়। আপনি অন্য থ্রেডকে খাঁটি বোঝা সহ এটি পড়ার দ্বারা ঘটতে পারেন।
পিটার কর্ডেস

4

বাস-ভিত্তিক এসএমপি-তে, পারমাণবিক উপসর্গ LOCKএকটি বাসের তারের সংকেতটিকে সক্রিয় (চালু) করে LOCK#। এটি বাসে অন্যান্য সিপাস / ডিভাইস ব্যবহার করার জন্য এটি নিষিদ্ধ করবে।

পিপিআরও এবং পি 2 বই http://books.google.com/books?id=3gDmyIYvFH4C&pg=PA245&dq=lock+in تعمیر+pentium&lr=&ei=_E61S5ehLI78zQSzrqwI&cd=1#v=onepage&q=lock%20in تعمیر=20pantum ২৪ পৃষ্ঠা

লক করা নির্দেশাবলী ক্রমিক ক্রিয়াকলাপ হয় , ক্রিয়াকলাপগুলি সিঙ্ক্রোনাইজ হয় .... / আউট-অফ-অর্ডার / লকড আরএমডাব্লু / রিড-মডিফাই-লিখন = পারমাণবিক নিজেই / নির্দেশনা নিশ্চিত করে যে প্রসেসর এটি কার্যকর করার আগে লক করা নির্দেশের আগে সমস্ত নির্দেশাবলী কার্যকর করবে exec / প্রায় এখনও ফ্লাশ না করা লেখাগুলি / এটি প্রসেসরের অভ্যন্তরে সমস্ত পোস্ট লেখাগুলি পরবর্তী নির্দেশ কার্যকর করার আগে বহিরাগত মেমরিতে ফ্লাশ করতে বাধ্য করে।

/ প্রায় এসএমপি / সেমফোর এস স্টেটে ক্যাশে রয়েছে ... 0 বাইটের তারিখের জন্য একটি পঠিত এবং অকার্যকর লেনদেন জারি করে (এটি হ'ল সংযুক্ত সিপিইউতে ক্যাশে লাইনের ভাগ অনুলিপি /)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.