আমার সংঘর্ষ শনাক্তকরণ ক্লাসের পারফরম্যান্সকে উন্নত করার চেষ্টা করার সময় আমি খুঁজে পেলাম যে the 80% সময় জিপিইউতে ব্যয় করেছে, এটি যদি / অন্য শর্তগুলি কেবল বালতিগুলির মধ্য দিয়ে লুপ করা উচিত তবে তার সীমানা নির্ধারণের চেষ্টা করে তবে এটি ব্যয় করে।
আরো স্পষ্ট করে:
প্রতিটি থ্রেড একটি আইডি পায়, সেই আইডি দ্বারা এটি মেমরি থেকে তার ত্রিভুজটি আনে (3 টি প্রতিটি পূর্ণসংখ্যার) এবং 3 টি দ্বারা এটি তার শীর্ষকোনাগুলি নিয়ে আসে (3 টি প্রতিটি ভাসমান)।
তারপরে এটি উল্লম্বকে পূর্ণসংখ্যার গ্রিড পয়েন্টগুলিতে রূপান্তর করে (বর্তমানে 8x8x8) এবং তাদের সেই গ্রিডের ত্রিভুজ সীমানায় রূপান্তর করে
3 টি পয়েন্টকে সীমানায় রূপান্তর করতে, এটি প্রতিটি পয়েন্টের মধ্যে প্রতিটি মাত্রার নূন্যতম / সর্বোচ্চ সন্ধান করে
যেহেতু আমি যে প্রোগ্রামিং ভাষাটি ব্যবহার করছি তাতে একটি মিনম্যাক্স অন্তর্নিহিত অনুপস্থিত, তাই আমি নিজেই একটি তৈরি করেছি, দেখতে এটির মতো:
procedure MinMax(a, b, c):
local min, max
if a > b:
max = a
min = b
else:
max = b
min = a
if c > max:
max = c
else:
if c < min:
min = c
return (min, max)
সুতরাং গড় হিসাবে এটি 2.5 * 3 * 3 = 22.5 তুলনা হওয়া উচিত যা প্রকৃত ত্রিভুজ - প্রান্ত ছেদ পরীক্ষা (প্রায় 100 * 11-50 নির্দেশাবলী) এর চেয়ে বেশি সময় খাওয়া শেষ করে।
আসলে, আমি দেখতে পেয়েছি যে সিপুতে প্রয়োজনীয় বালতিগুলি প্রাক-গণনা করা (একক থ্রেডেড, কোনও ভেক্টরাইজেশন নয়), তাদের বালতি সংজ্ঞা সহ একটি জিপিইউ ভিউতে স্ট্যাক করে এবং জিপিইউকে 4 থ্রেড অতিরিক্ত পাঠানো চেষ্টা করার চেয়ে 6 গুণ দ্রুত ছিল ঘটনাস্থলে সীমা নির্ধারণ করতে। (নোট করুন যে তারা প্রতিটি মৃত্যুদন্ড কার্যকর হওয়ার আগে থেকে পুনরায় গণনা করা হয় যেহেতু আমি গতিশীল মেসগুলি নিয়ে কাজ করছি)
তাহলে কেন একটি জিপিইউতে তুলনা এত ভয়ঙ্করভাবে ধীর হয়?