x86: ZF, не всегда обновляемый И?

@ r3plica,

Это была старая проблема, которая была исправлена ​​в версии 1.1.2 или более поздней версии BulkExecutor.

Я попытался воспроизвести вашу проблему, используя Github Repo для запуска метода BulkImportAsync из BulkExecutor, который отлично работал для меня.

Я использовал приведенный ниже метод для CreatePartitionCollection-

static internal async Task CreatePartitionedCollectionAsync(DocumentClient client, string databaseName,
            string collectionName, int collectionThroughput)
        {
            PartitionKeyDefinition partitionKey = new PartitionKeyDefinition
            {
                Paths = new Collection { ConfigurationManager.AppSettings["CollectionPartitionKey"] }
            };
            DocumentCollection collection = new DocumentCollection { Id = collectionName, PartitionKey = partitionKey };

            try
            {
                collection = await client.CreateDocumentCollectionAsync(
                    UriFactory.CreateDatabaseUri(databaseName),
                    collection,
                    new RequestOptions { OfferThroughput = collectionThroughput });
            }
            catch (Exception e)
            {
                throw e;
            }

            return collection;
        }

А затем в методе Main использовали BulkImport, как показано ниже: -

// Подготовка к массовому импорту.

// Создание документов с простым ключом разделения здесь. строка partitionKeyProperty = dataCollection.PartitionKey.Paths [0] .Replace ("/", "");

    long numberOfDocumentsToGenerate = long.Parse(ConfigurationManager.AppSettings["NumberOfDocumentsToImport"]);
    int numberOfBatches = int.Parse(ConfigurationManager.AppSettings["NumberOfBatches"]);
    long numberOfDocumentsPerBatch = (long)Math.Floor(((double)numberOfDocumentsToGenerate) / numberOfBatches);

    // Set retry options high for initialization (default values).
    client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 30;
    client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 9;

    IBulkExecutor bulkExecutor = new BulkExecutor(client, dataCollection);
    await bulkExecutor.InitializeAsync();

    // Set retries to 0 to pass control to bulk executor.
    client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 0;
    client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 0;

    BulkImportResponse bulkImportResponse = null;
    long totalNumberOfDocumentsInserted = 0;
    double totalRequestUnitsConsumed = 0;
    double totalTimeTakenSec = 0;

    var tokenSource = new CancellationTokenSource();
    var token = tokenSource.Token;

var tasks = new List ();

        tasks.Add(Task.Run(async () =>
        {
            Trace.TraceInformation(String.Format("Executing bulk import for batch {0}", i));
            do
            {
                try
                {
                    bulkImportResponse = await bulkExecutor.BulkImportAsync(
                        documents: documentsToImportInBatch,
                        enableUpsert: true,
                        disableAutomaticIdGeneration: true,
                        maxConcurrencyPerPartitionKeyRange: null,
                        maxInMemorySortingBatchSize: null,
                        cancellationToken: token);
                }
                catch (DocumentClientException de)
                {
                    Trace.TraceError("Document client exception: {0}", de);
                    break;
                }
                catch (Exception e)
                {
                    Trace.TraceError("Exception: {0}", e);
                    break;
                }
            } while (bulkImportResponse.NumberOfDocumentsImported < documentsToImportInBatch.Count);



            totalNumberOfDocumentsInserted += bulkImportResponse.NumberOfDocumentsImported;
            totalRequestUnitsConsumed += bulkImportResponse.TotalRequestUnitsConsumed;
            totalTimeTakenSec += bulkImportResponse.TotalTimeTaken.TotalSeconds;
        },
        token));

Позвольте мне знать, если вам нужно больше деталей.

7
задан Cody Brocious 22 January 2009 в 15:35
поделиться

4 ответа

Спасибо все. Это был мой отказ, извините для беспокойства Вас. Существует ответвление к 'интервалу 3' от другого места. Вот почему флаги несовместимы с инструкциями перед 'интервал 3'. Я был смущен, всегда имея edx == 0x80000 в этой точке.Еще раз извините.

4
ответ дан 7 December 2019 в 07:51
поделиться

Можно легко исследовать интервал 3 обработчика, чтобы видеть, возвращается ли он с a iret (т.е. вытолкайте назад флаги вызывающих сторон), или если это возвращается с retf 2 (т.е. сохраните флаги от обработчика).

2
ответ дан 7 December 2019 в 07:51
поделиться

Согласно ссылке системы команд Intel, ZF всегда устанавливается согласно результату. Мог что-то в интервале 3 обработчика управлять этим?

Править: После дальнейшего рытья через руководства (благодарят Бога за Intel, отсылающий бесплатные экземпляры!), мои единственные идеи состоят в том, что это - или интервал 3 обработчика, устанавливающие его так или иначе или процессор, только смотрящий на дуплекс вместо edx при установке флагов. Оба кажутся маловероятными, но последний кажется абсолютно неправдоподобным. В каком режиме Вы работаете? (Реальный, защищенный, нереальный, долго?)

1
ответ дан 7 December 2019 в 07:51
поделиться

Это мог быть Ваш отладчик, делает что-то специальное, такое как синхронизация memeroy и регистров. При выполнении его без отладчика, это перестало работать, Вы говорите?

0
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: