Ignore:
Timestamp:
Oct 30, 2010, 3:12:20 PM (11 years ago)
Author:
Sven Rech
Message:
  • added OpenCL.Net project
  • added OpenCL settings in KeySearcher
  • changed rereservation status message behavior
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcherSettings.cs

    r1751 r2040  
    55using System.Collections.ObjectModel;
    66using KeySearcher.P2P.Storage;
     7using OpenCLNet;
    78
    89namespace KeySearcher
     
    1415        private const string GroupPeerToPeer = "Peer-to-Peer network";
    1516        private const string GroupEvaluation = "Evaluation";
    16 
    17         public KeySearcherSettings(KeySearcher ks)
     17        private const string GroupOpenCL = "OpenCL";
     18
     19        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
     20
     21        public KeySearcherSettings(KeySearcher ks, OpenCLManager oclManager)
    1822        {
    1923            keysearcher = ks;
     24
     25            devicesAvailable.Clear();
     26            if (oclManager != null)
     27                foreach (var device in oclManager.Context.Devices)
     28                    devicesAvailable.Add(device.Vendor + ":" + device.Name);
     29
    2030            CoresAvailable.Clear();
    2131            for (int i = 0; i < Environment.ProcessorCount; i++)
     
    2434
    2535            chunkSize = 21;
     36        }
     37
     38        public void Initialize()
     39        {
     40            OpenCLGroupVisiblity();
    2641        }
    2742
     
    226241        }
    227242
     243        #region OpenCL
     244
     245        private bool useOpenCL;
     246        [TaskPane("Use OpenCL", "If checked, an OpenCL device is used for bruteforcing.",
     247            GroupOpenCL, 1, false, DisplayLevel.Experienced, ControlType.CheckBox)]
     248        public bool UseOpenCL
     249        {
     250            get { return useOpenCL; }
     251            set
     252            {
     253                if (value != useOpenCL)
     254                {
     255                    useOpenCL = value;
     256                    hasChanges = true;
     257                    OnPropertyChanged("UseOpenCL");
     258
     259                    DeviceVisibility();
     260                }
     261            }
     262        }
     263
     264        private void DeviceVisibility()
     265        {
     266            if (TaskPaneAttributeChanged == null)
     267                return;
     268
     269            Visibility visibility = UseOpenCL ? Visibility.Visible : Visibility.Collapsed;
     270            TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", visibility)));
     271        }
     272
     273        private void OpenCLGroupVisiblity()
     274        {
     275            if (TaskPaneAttributeChanged == null)
     276                return;
     277
     278            if (DevicesAvailable.Count == 0)
     279            {
     280                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", Visibility.Collapsed)));
     281                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("UseOpenCL", Visibility.Collapsed)));
     282            }
     283            else
     284            {
     285                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", Visibility.Visible)));
     286                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("UseOpenCL", Visibility.Visible)));
     287                DeviceVisibility();
     288            }
     289        }
     290
     291        private int openCLDevice;
     292        [TaskPane("OpenCL Device", "Choose the OpenCL you want to use.", GroupOpenCL, 2, false, DisplayLevel.Experienced, ControlType.DynamicComboBox, new string[] { "DevicesAvailable" })]
     293        public int OpenCLDevice
     294        {
     295            get { return this.openCLDevice; }
     296            set
     297            {
     298                if (value != this.openCLDevice)
     299                {
     300                    this.openCLDevice = value;
     301                    OnPropertyChanged("OpenCLDevice");
     302                    HasChanges = true;
     303                }
     304            }
     305        }
     306
     307        private ObservableCollection<string> devicesAvailable = new ObservableCollection<string>();
     308        public ObservableCollection<string> DevicesAvailable
     309        {
     310            get { return devicesAvailable; }
     311            set
     312            {
     313                if (value != devicesAvailable)
     314                {
     315                    devicesAvailable = value;
     316                }
     317                OnPropertyChanged("DevicesAvailable");
     318            }
     319        }
     320
     321        #endregion
     322
    228323        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
    229324        public ObservableCollection<string> CoresAvailable
Note: See TracChangeset for help on using the changeset viewer.